package com.gyg.程序员面试金典;

import java.util.Arrays;

/**
 * 面试题 05.06. 整数转换
 * 整数转换。编写一个函数，确定需要改变几个位才能将整数A转成整数B。
 * 解题思路：
 * 利用位运算
 * （1）通过对A和B进行异或运算，得到的二进制数中有几个1，就说明有几位不同，需要替换
 * （2）所以我们只需要对他们异或后得到的二进制数进行判断，看其中有几个1即可。
 * （3）通过对temp和temp-1进行与运算，可以将temp的最右边的1变为0
 * （4）统计当temp等于0的过程中，循环了多少次。即为1的个数
 */
public class T05_06 {
    public static void main(String[] args) {
        int n = convertInteger(2, -1);
        System.out.println(n);
    }

    public static int convertInteger(int A, int B) {
//        （1）通过对A和B进行异或运算，得到的二进制数中有几个1，就说明有几位不同，需要替换
        int temp = A ^ B;
//        （2）定义count来记录需要变化几个数
        int count = 0;
//        （3）通过while循环，将temp逐渐变为0，当temp等于0的时候结束循环
        while (temp != 0) {
//            （4）将tmpe的最右边的1变为0
            temp = temp & (temp - 1);
//            （5）将记录数加一
            count++;
        }
//        （6）返回记录数
        return count;
    }


}
